package com.dkakunsi.monev.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dkakunsi.monev.dao.KegiatanDao;
import com.dkakunsi.monev.entity.Kegiatan;
import com.dkakunsi.monev.entity.Program;
import com.dkakunsi.monev.entity.User;
import com.dkakunsi.monev.util.MonevDataException;

@Service("kegiatanService")
@Transactional(readOnly=true)
public class KegiatanService extends MonevAbstractService {
	@Autowired private KegiatanDao dao;
	
	@Transactional(readOnly=false)
	public void save(Kegiatan kegiatan) {
		dao.save(kegiatan);
	}
	
	@Transactional(readOnly=false)
	public void delete(Kegiatan kegiatan) {
		kegiatan.setListIndikator(null);
		kegiatan.setListRealisasi(null);
		dao.delete(kegiatan);
	}
	
	public Kegiatan getById(Object key) throws MonevDataException {
		return dao.get(key);
	}
	
	public List<Kegiatan> getAll() throws MonevDataException {
		return dao.getAll();
	}
	
	public List<Kegiatan> get(int tahunAnggaran) throws MonevDataException {
		return dao.getAll(tahunAnggaran);
	}
	
	public List<Kegiatan> get(int tahunAnggaran, String instansi) throws MonevDataException {
		return dao.get(instansi, tahunAnggaran);
	}

	public List<Kegiatan> get(int tahunAnggaran, Program program) throws MonevDataException {
		return dao.get(program, tahunAnggaran);
	}

	public List<Kegiatan> get(int tahunAnggaran, Program program, String instansi) throws MonevDataException {
		return dao.get(program, tahunAnggaran, instansi);
	}

	public List<Kegiatan> get(int tahunAnggaran, User user) throws MonevDataException {
		return get(tahunAnggaran, user.getInstansi());
	}

	public List<Kegiatan> get(int tahunAnggaran, Program program, User user) throws MonevDataException {
		return get(tahunAnggaran, program, user.getInstansi());
	}

	public List<Kegiatan> get(Program program) throws MonevDataException {
		return dao.get(program);
	}

	public List<Kegiatan> get(Program program, String instansi) throws MonevDataException {
		return dao.get(program, instansi);
	}

	public List<Kegiatan> get(Program program, User user) throws MonevDataException {
		return get(program, user.getInstansi());
	}

	public List<Kegiatan> get(String instansi) throws MonevDataException {
		return dao.get(instansi);
	}

	public List<Kegiatan> get(User user) throws MonevDataException {
		return get(user.getInstansi());
	}
	
	public List<Kegiatan> getByName(String name) throws MonevDataException {
		return dao.getByNama(name);
	}

	public List<Kegiatan> getByName(String name, String instansi) throws MonevDataException {
		return dao.getByNama(name, instansi);
	}

	public List<Kegiatan> getByName(String name, User user) throws MonevDataException {
		return getByName(name, user.getInstansi());
	}

	public List<Kegiatan> getByName(String name, int tahun) throws MonevDataException {
		return dao.getByNama(name, tahun);
	}

	public List<Kegiatan> getByName(String name, int tahun, String instansi) throws MonevDataException {
		return dao.getByNama(name, tahun, instansi);
	}

	public List<Kegiatan> getByName(String name, int tahun, User user) throws MonevDataException {
		return getByName(name, tahun, user.getInstansi());
	}

	public List<Kegiatan> getBySumberDana(String sumberDana) throws MonevDataException {
		return dao.getBySumberDana(sumberDana);
	}

	public List<Kegiatan> getBySumberDana(String sumberDana, String instansi) throws MonevDataException {
		return dao.getBySumberDana(sumberDana, instansi);
	}

	public List<Kegiatan> getBySumberDana(String sumberDana, User user) throws MonevDataException {
		return getBySumberDana(sumberDana, user.getInstansi());
	}

	public List<Kegiatan> getBySumberDana(String sumberDana, int tahunAnggaran) throws MonevDataException {
		return dao.getBySumberDana(sumberDana, tahunAnggaran);
	}
	
	public List<Kegiatan> getBySumberDana(String sumberDana, int tahunAnggaran, String instansi) throws MonevDataException {
		return dao.getBySumberDana(sumberDana, tahunAnggaran, instansi);
	}
	
	public List<Kegiatan> getBySumberDana(String sumberDana, int tahunAnggaran, User user) throws MonevDataException {
		return getBySumberDana(sumberDana, tahunAnggaran, user.getInstansi());
	}
	
	public List<String> getListInstansi() {
		return dao.getListInstansi();
	}
	
}
